#ifndef _MICRO_TASK_H_
#define _MICRO_TASK_H_

#include "microConfig.h"
#include "microList.h"
#include "microTimer.h"

typedef struct MicroTaskStruct{
    int8_t priority;                        /* 优先级 */
    char name[MICRO_TASK_NAME_MAX_LENGTH];  /* 名称 */
    void *pElement;                         /* 当前节点所属 */
    void (*vFunction)(void *pvValue);

    MicroTimerTypeDef timer;                /* 延时 */
    MicroListType list;                     /* 链表 */
}MicroTaskType;


void vMicroTaskInit(void);
void vMicroTaskIdleInit(void);
MicroTaskType *ptypeMicroTaskCurrentGet(void);
int8_t cMicroTaskResume(MicroTaskType *ptypeTaskHandle);
int8_t cMicroTaskSuspend(MicroTaskType *ptypeTaskHandle);
MicroTaskType *ptypeMicroTaskGreat(char *name, int8_t priority, void (*vFunction)(void *pvValue));
void vMicroTaskDelay(int64_t lTime);
void vMicroTaskDelayUntil(int64_t lTime);
void vMicroTaskMachine(void);


#endif
